/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.dto.CorrelativosHistoclinId;
import com.proyecto.histoclin.modelo.dto.HistoclinConsentosinfo;
import com.proyecto.histoclin.modelo.dto.HistoclinProcedimientos;

/**
 * @author vico
 *
 */
public class ServicioHistoclinConsentosinfo extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosHistoclin servicioCorrelativosHistoclin;
	ServicioHistoclinProcedimientos	servicioHistoclinProcedimientos;
	
	public ServicioHistoclinConsentosinfo() {
		// TODO Auto-generated constructor stub
	}


	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		

		HistoclinConsentosinfo objHistoclinConsentosinfo = (HistoclinConsentosinfo)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objHistoclinConsentosinfo);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosHistoclin.obtenerProximoNumeroComoString(
					new CorrelativosHistoclinId (objHistoclinConsentosinfo.getId().getCiaopr(), "HC_CONSEINFO","conseninforcod" ) ,true);

			objHistoclinConsentosinfo.getId().setConseninforcod( Integer.parseInt(proxNumero) );

	
			super.incluir(objHistoclinConsentosinfo, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoclinEpicrisis::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoclinEpicrisis.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	/*
	@Override
	public void eliminar(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		
		HistoclinConsentosinfo objHistoclinConsentosinfo = (HistoclinConsentosinfo)pojo;
		
		servicioHistoclinProcedimientos.eliminarProcedimientoPorEventosExterna(
				objHistoclinConsentosinfo.getId().getCiaopr(),
				objHistoclinConsentosinfo.getId().getHisclicod(),
				objHistoclinConsentosinfo.getProcedimcod()
			);
		super.eliminar(pojo, iniciaTransaccion);
	}
*/
	public void eliminarConsentosinfoPorEventosExterna(
			String ciaopr, Integer hisclicod, Integer procedimcod, boolean iniciaTransaccion){
		HistoclinConsentosinfo objHistoclinConsentosinfo = null;
		try {
			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.1");
			objHistoclinConsentosinfo = buscarConsentosinfo(ciaopr, hisclicod, procedimcod );
			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.2");
			this.eliminar(objHistoclinConsentosinfo, iniciaTransaccion);
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("e.eliminarProcedimientoPorEventosExterna:: " + e.getMessage());
		}
	}


	public HistoclinConsentosinfo buscarConsentosinfo(String ciaopr, Integer hisclicod, Integer procedimcod){
		HistoclinConsentosinfo objHistoclinConsentosinfo = null;
		String query = "";
		try {

			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.1.1");
			
			query = "FROM HistoclinConsentosinfo tabla WHERE tabla.id.ciaopr='" + ciaopr + "'" +
			" and tabla.id.hisclicod = " + hisclicod +
			" and tabla.procedimcod = " + procedimcod;

			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.1.1.query: " + query);			
			List histoclinConsentosinfo = propiedadDAO.ejecutarQueryConsulta(query);

			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.1.2");
			objHistoclinConsentosinfo = (HistoclinConsentosinfo)histoclinConsentosinfo.get(0);

			System.out.println("eliminar.ServicioHistoclinProcedimientos.1.1.3");
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("ServicioHistoclinConsentosinfo.buscarConsentosinfo.servicioHistoclinDiagnosticos.buscarDiagnosticoOrden:: " + e.getMessage());
		}
		
		return objHistoclinConsentosinfo;
	}
	
	public void crearHistoclinConsentosinfo_byProcedimientos(
			String ciaopr, Integer hisclicod, Integer nropersona, Integer procedimcod, String cupscod, String fchconseninfor){
		HistoclinConsentosinfo objHistoclinConsentosinfo = new HistoclinConsentosinfo();
		
		objHistoclinConsentosinfo.getId().setCiaopr(ciaopr);
		objHistoclinConsentosinfo.getId().setHisclicod(hisclicod);
		objHistoclinConsentosinfo.setNropersona(nropersona);
		objHistoclinConsentosinfo.setProcedimcod(procedimcod); 
		objHistoclinConsentosinfo.setCupscod(cupscod);
		objHistoclinConsentosinfo.setFchconseninfor(fchconseninfor);
		
		try {
			this.incluir(objHistoclinConsentosinfo, true);	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("e.crearHistoclinConsentosinfo_byProcedimientos:: " + e.getMessage());
		}
		
	}
	
	public ServicioCorrelativosHistoclin getServicioCorrelativosHistoclin() {
		return servicioCorrelativosHistoclin;
	}

	public void setServicioCorrelativosHistoclin(
			ServicioCorrelativosHistoclin servicioCorrelativosHistoclin) {
		this.servicioCorrelativosHistoclin = servicioCorrelativosHistoclin;
	}


	public ServicioHistoclinProcedimientos getServicioHistoclinProcedimientos() {
		return servicioHistoclinProcedimientos;
	}


	public void setServicioHistoclinProcedimientos(
			ServicioHistoclinProcedimientos servicioHistoclinProcedimientos) {
		this.servicioHistoclinProcedimientos = servicioHistoclinProcedimientos;
	}

}
